1296F - Berland Beauty - CodeForces Solution


constructive algorithms dfs and similar greedy sortings trees *2100

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;

#define ll int
#define FOR(i,l,r) for(ll i = l; i <= r; ++i)
#define FOD(i,r,l) for(ll i = r; i >= l; --i)
#define ii pair<ll,ll>
#define fi first
#define se second
#define endl '\n'
const ll inf = 1e18;
const ll N = 5000;

ll n, q, val[N + 5][N + 5];
vector<ll> dsk[N + 5];
ll par[N + 5][N + 5];
vector<ii> edge;

void dfs(ll u, ll p, ll x) {
    for(auto v : dsk[u]) {
        if(v != p) {
            par[x][v] = u;
            dfs(v,u, x);
        }
    }
}

struct jelly{
    ll a, b, g;
} p[N + 5];

bool cmp(jelly x, jelly y) {
    return x.g < y.g;
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> n;
    FOR(i,1,n - 1) {
        ll u, v; cin >> u >> v;
        dsk[u].push_back(v);
        dsk[v].push_back(u);
        edge.push_back({u,v});
    }
    FOR(i,1,n) dfs(i, -1, i);
    FOR(i,1,n) FOR(j,1,n) val[i][j] = 1;
    cin >> q;
    FOR(i,1,q) {
        cin >> p[i].a >> p[i].b >> p[i].g;
    }
    sort(p + 1, p + q + 1, cmp);

    FOR(i,1,q) {
        ll u = p[i].a, v = p[i].b, w = p[i].g;
        while(u != v) {
            ll pos = par[u][v];
            val[pos][v] = val[v][pos] = w;
            v = pos;
        }
    }

    FOR(i,1,q) {
        ll minn = 1e18;
        ll w= p[i].g;
        ll u = p[i].a, v = p[i].b;
        while(u != v) {
            ll pos = par[u][v];
            minn = min(minn, val[pos][v]);
            v = pos;
        }
        if(minn != p[i].g) {
            cout << "-1";
            return 0;
        }
    }
    for(auto i : edge) {
        cout << val[i.fi][i.se] << " ";
    }
    return 0;
}
//Jelly1010


Comments

Submit
0 Comments
More Questions

1302. Deepest Leaves Sum
1209. Remove All Adjacent Duplicates in String II
994. Rotting Oranges
983. Minimum Cost For Tickets
973. K Closest Points to Origin
969. Pancake Sorting
967. Numbers With Same Consecutive Differences
957. Prison Cells After N Days
946. Validate Stack Sequences
921. Minimum Add to Make Parentheses Valid
881. Boats to Save People
497. Random Point in Non-overlapping Rectangles
528. Random Pick with Weight
470. Implement Rand10() Using Rand7()
866. Prime Palindrome
1516A - Tit for Tat
622. Design Circular Queue
814. Binary Tree Pruning
791. Custom Sort String
787. Cheapest Flights Within K Stops
779. K-th Symbol in Grammar
701. Insert into a Binary Search Tree
429. N-ary Tree Level Order Traversal
739. Daily Temperatures
647. Palindromic Substrings
583. Delete Operation for Two Strings
518. Coin Change 2
516. Longest Palindromic Subsequence
468. Validate IP Address
450. Delete Node in a BST